#include"main.h"

int main()
{
    sqlink H;
    H=list_creat();
    list_insert(H,10,0);
    list_insert(H,20,1);
    list_insert(H,30,2);
    list_insert(H,45,2);
    list_show(H);
    printf("\n");
    printf("%d\n",list_locate(H,30));
    list_delete(H,1);
    printf("\n");
    list_show(H);
}

sqlink list_creat()
{
    sqlink H;
    if((H=(sqlink)malloc(sizeof(sqlist)))==NULL)
    {
        printf("creat failed\n");
        return NULL;
    }
    memset(H,0,sizeof(sqlist));
    H->last=-1;
    return H;
}

int list_clear(sqlink H)  //顺序表的清除
{
    if(H==NULL)
        return -1;
    memset(H,0,sizeof(sqlist));
    H->last=-1;
    return 0;
}

/*
*@ret 1——empty      0——not empty
*/
int list_empty(sqlink H)       //顺序表的判空
{
    if(H->last==-1)
        return 1;
    else
        return 0; 
}



int list_length(sqlink H)      //顺序表的长度
{
    if(H==NULL)
    return -1;
    else
    return (H->last+1);
}



int list_locate(sqlink H,data_t value)     //顺序表元素的位置
{
    if(H==NULL)
    {
        printf("list is NULL\n");
        return -1;
    }
    int i=H->last;
    while(i+1)
    {
        if(H->data[i]==value)
        {
            break;
        }
        else
        {
            i--;
        }
    }
    return i;
}
int list_insert(sqlink H,data_t value,int pos)    //顺序表元素的插入
{
    sqlink L;
    L=H;
    if(pos<0||pos>L->last+1)
    {
        printf("insert is error\n");
        return -1;
    }
    for(int i=L->last;i>=pos;i--)
    {
        L->data[i+1]=L->data[i];
    }
    L->last++;
    L->data[pos]=value;
    return 0;
}

int list_show(sqlink H)             //遍历
{
    if(H==NULL)
    {
        printf("list is NULL\n");
        return -1;
    }
    int i;
    for(i=0;i<=H->last;i++)
    {
        printf("%d  ",H->data[i]);
    }
    return 0; 
}


int list_delete(sqlink H,int pos)
{
    sqlink L;
    L=H;
    int i;
    if(H==NULL)
    {
        printf("list is null\n");
        return -1;
    }
    if(pos<0||pos>H->last)
    {
        printf("delete error\n");
        return -1;
    }

    for(i=pos;i<L->last;i++)
    {
        L->data[i]=L->data[i+1];
    }
    L->last--;
    return 0;
}
